/**
 * @param {number[]} nums
 * @return {number}
 */
// 位运算
// 每一位判断0还是1是3的整数倍，如果0是则该位为1，否则就是0
// >> 右移位左边补0
// 根据 n & 1 == 1（的原理是判断二进制位最后一个数字是不是1）
// 综合以上特性，判断每一个数字的每位是0还是1
var singleNumber = function (nums) {
    let res = 0
    for (let i = 0; i < 32; i++) {
        let sum = 0
        for (let n of nums) {
            // 右边移位（判断i + 1位是否是1）
            if ((n >> i) & 1 === 1) sum++
        }
        // 如果对应位置是1则计算数值大小（0不用管，因为0乘以任何树都是0）
        if (sum % 3 == 1) res += (1 << i)
    }
    return res
};